package com.cskaoyan.javase._1interface._5extend;

import com.sun.media.jfxmedia.events.NewFrameEvent;

import javax.sound.midi.SysexMessage;

/**
 * 学习完抽象类和接口后,扩展语法上的使用
 * 扩展一:
 *      一旦方法中,形参数据类型和返回值数据类型
 *      写了接口/抽象类
 *      那么在具体给出实参或者返回值时,必须给它们的子类对象(它们自身没有对象)
 *
 * 扩展二:
 *      父子类在重写方法时,子类中的方法返回值类型并不需要和父类完全保持一致:
 *          1.如果是void和基本数据类型,必须完全保持一致.
 *          2.如果父类方法的返回值类型是一个父类类型
 *              那么子类方法可以把返回值类型,重写为一个子类类型
 *
 * 扩展三: Java中最特殊的父类类型——Object
 *      它是所有类的父类
 *
 *
 * @since 14:59
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        test(new A());
    }

    public static void test(IA a) {
    }

    public static BaseA test() {
        return new A();
    }
}

interface IA {
}

class A extends BaseA implements IA {
}

abstract class BaseA {
}

class Father {
    IA test() {
        return null;
    }

    BaseA test2() {
        return null;
    }

    Object test3(){
        return null;
    }
}

class Son extends Father {
    @Override
    A test() {
        return null;
    }
    @Override
    A test2() {
        return null;
    }

    @Override
    IA test3() {
        return null;
    }
}